package com.idanchuang.component.redis.task;

import java.util.concurrent.TimeUnit;

/**
 *
 * 使用方式: 实现TimedTask接口, 并声明为Bean即可
 *
 * @author yjy
 * Created at 2022/1/5 11:58 下午
 */
public interface TimedTask {

    /**
     * 开始任务
     */
    void start();

    /**
     * 任务名称, 每个人任务唯一
     * @return 任务名称
     */
    String getTaskName();

    /**
     * 执行周期的单位
     * @return 时间单位
     */
    TimeUnit getTimeUnit();

    /**
     * 首次执行延时, 默认不延时
     * @return 首次执行延时
     */
    long getInitialDelay();

    /**
     * 执行周期, 单位默认秒, 可以通过重写 getTimeUnit() 方法修改时间单位
     * @return 多少时间执行一次
     */
    long getInterval();

    /**
     * 执行定时任务逻辑
     */
    void runOnce();

    /**
     * 任务销毁
     */
    void destroy();

}
